package picol.model.asa.expr;

import picol.model.asa.inst.ASAInstPicoL;
import picol.model.jjgener.Token;
import picol.model.memory.TableSymbole;

/**
 * Classe de gestion de l'expression ident
 * @author Aurélien Marcel - Julien Sanderson
 */
public class ASAExprIdent extends ASAExpr {

    private String nom;
    private Token ident;

    public ASAExprIdent(String _nom, Token _ident) {
        this.nom = _nom;
        this.ident = _ident;
    }

    public String getLabelExplorateur() {
        return "IDENT " + nom;
    }

    @Override
    public ASAExpr simplifie() {
        return this;
    }

    @Override
    public int evalue() {
        Integer var = 0;
        Boolean varTrouvee = false;

        for (TableSymbole tblSym : ASAInstPicoL.listTblSym) {
            if (tblSym.existeVariable((String) nom)) {
                varTrouvee = true;
                if (tblSym.getValeur((String) nom) != null) {
                    var = (tblSym.getValeur((String) nom)).evalue();
                    tblSym.modifierVariable(nom, new ASAExprEntier(var));
                }
            }
        }
        if (!varTrouvee) {
            // renvoie une exception si l'ident n'existe pas
            throw new RuntimeException("variable " + nom + " doesn't exists");
        }
        return var;
    }

    @Override
    public Token getToken() {
        return ident;
    }
}
